from socket import *
import json
from tkinter import filedialog,messagebox
# 建立套接字，等待连接
def Server():
    sctsend=socket(AF_INET,SOCK_STREAM)
    sctsend.bind(('0.0.0.0',21100))
    sctsend.listen()
    print('[PORT 21100 READY!]')
    while True:
        # 收到远端连接 开始处理
        con,data=sctsend.accept()
        data=con.recv(1024)

        #显示远端端口号和IP，解码json
        remotename=con.getpeername()
        print('ACCEPT FILES FROM IP %s at port %d'%remotename)
        rcv=data.decode()
        head=json.loads(rcv)
        print(head)
        #解码json内含的数据
        size=head['filesize']
        fn=head['filename']
        print('[对端文件大小：%d KB,文件名%s]'%((size/1024),fn))
        a=messagebox.askyesno('新文件','收到来自IP:%s在远程端口%d的连接，是否准许传输？'%remotename)
        if a==False:
            confirm = {"ready": False}
            jsnconf = json.dumps(confirm)
            con.send(jsnconf.encode())
            con.close()
            messagebox.showinfo('拒绝','您拒收了文件')
            break
        print(type(a))
        confirm={"ready":True}
        jsnconf=json.dumps(confirm)
        con.send(jsnconf.encode())

        print('缓冲器%dKB建立' % (size/1024))
        rcvf=con.recv(size)
        print('传输完毕')
        saveas=filedialog.asksaveasfilename(title='接收文件另存为',initialfile=fn)
        if saveas=='':
            messagebox.showinfo('取消传送','您取消了文件传输')
            break
        p=open(saveas,'wb')
        p.write(rcvf)
        p.close()
        messagebox.showinfo('成功', '文件：%s 已保存'%fn)
        break

